#define BLINKER_WIFI
#include <Blinker.h>


char auth[] = "e5c3e51e5242";
char ssid[] = "XC";
char pswd[] = "XZB123456";



BlinkerButton Button5("BUTTON_5");
BlinkerButton Button6("BUTTON_6");
BlinkerButton Button7("W");
BlinkerButton Button8("S");
BlinkerButton Button9("A");
BlinkerButton Button10("D");
BlinkerButton Button11("WA");
BlinkerButton Button12("DS");
BlinkerButton Button13("WD");
BlinkerButton Button14("AS");
BlinkerButton Button15("STOP");

//定义蓝牙，按钮，摇杆


int FRONT_LEFT_IN1 = 16;
int FRONT_LEFT_IN2 = 14;

int FRONT_RIGHT_IN3 = 12;
int FRONT_RIGHT_IN4 = 13;

int REAR_LEFT_IN1 = 4;
int REAR_LEFT_IN2 = 0;

int REAR_RIGHT_IN3 = 2;
int REAR_RIGHT_IN4 = 15;




void Button5_callback(const String & state)
{
   if(state == "tap")
   {
       // 前左电机
  digitalWrite(FRONT_LEFT_IN1, LOW);
  digitalWrite(FRONT_LEFT_IN2, HIGH);

  // 前右电机
  digitalWrite(FRONT_RIGHT_IN3, HIGH);
  digitalWrite(FRONT_RIGHT_IN4, LOW);
 

  // 后左电机
  digitalWrite(REAR_LEFT_IN1, LOW);
  digitalWrite(REAR_LEFT_IN2, HIGH);


  // 后右电机
  digitalWrite(REAR_RIGHT_IN3, HIGH);
  digitalWrite(REAR_RIGHT_IN4, LOW);
   }
}
void Button6_callback(const String & state)
{
   if(state == "tap")
   {
       // 前左电机
  digitalWrite(FRONT_LEFT_IN1, HIGH);
  digitalWrite(FRONT_LEFT_IN2, LOW);
 

  // 前右电机
  digitalWrite(FRONT_RIGHT_IN3, LOW);
  digitalWrite(FRONT_RIGHT_IN4, HIGH);

  // 后左电机
  digitalWrite(REAR_LEFT_IN1, HIGH);
  digitalWrite(REAR_LEFT_IN2, LOW);
 
  // 后右电机
  digitalWrite(REAR_RIGHT_IN3, LOW);
  digitalWrite(REAR_RIGHT_IN4, HIGH);
   }
}
//BUTTON456控制旋转

void Button7_callback(const String & state)
{
   if(state == "tap")
   {
    FRONT();
   }
}
void Button8_callback(const String & state)
{
   if(state == "tap")
   {
    BEHIND();
   }
}
void Button9_callback(const String & state)
{
   if(state == "tap")
   {
    LEFT();
   }
}
void Button10_callback(const String & state)
{
   if(state == "tap")
   {
    RIGHT();
   }
}
void Button11_callback(const String & state)
{
   if(state == "tap")
   {
    LEFTFRONT();
   }
}
void Button12_callback(const String & state)
{
   if(state == "tap")
   {
    RIGHTBEHIND();
   }
}
void Button13_callback(const String & state)
{
   if(state == "tap")
   {
    RIGHTFRONT();
   }
}
void Button14_callback(const String & state)
{
   if(state == "tap")
   {
    LEFTBEHIND();
   }
}
void Button15_callback(const String & state)
{
   if(state == "tap")
   {
    stopMotors();
   }
}




void FRONT()
{
  // 前左电机
  digitalWrite(FRONT_LEFT_IN1, HIGH);
  digitalWrite(FRONT_LEFT_IN2, LOW);
 

  // 前右电机
  digitalWrite(FRONT_RIGHT_IN3, HIGH);
  digitalWrite(FRONT_RIGHT_IN4, LOW);


  // 后左电机
  digitalWrite(REAR_LEFT_IN1, HIGH);
  digitalWrite(REAR_LEFT_IN2, LOW);

  // 后右电机
  digitalWrite(REAR_RIGHT_IN3, HIGH);
  digitalWrite(REAR_RIGHT_IN4, LOW);
}
void BEHIND()
{
  // 前左电机
  digitalWrite(FRONT_LEFT_IN1, LOW);
  digitalWrite(FRONT_LEFT_IN2, HIGH);

  // 前右电机
  digitalWrite(FRONT_RIGHT_IN3, LOW);
  digitalWrite(FRONT_RIGHT_IN4, HIGH);

  // 后左电机
  digitalWrite(REAR_LEFT_IN1, LOW);
  digitalWrite(REAR_LEFT_IN2, HIGH);

  // 后右电机
  digitalWrite(REAR_RIGHT_IN3, LOW);
  digitalWrite(REAR_RIGHT_IN4, HIGH);

}
void LEFT()
{
  // 前左电机
  digitalWrite(FRONT_LEFT_IN1, LOW);
  digitalWrite(FRONT_LEFT_IN2, HIGH);


  // 前右电机
  digitalWrite(FRONT_RIGHT_IN3, HIGH);
  digitalWrite(FRONT_RIGHT_IN4, LOW);


  // 后左电机
  digitalWrite(REAR_LEFT_IN1, HIGH);
  digitalWrite(REAR_LEFT_IN2, LOW);


  // 后右电机
  digitalWrite(REAR_RIGHT_IN3, LOW);
  digitalWrite(REAR_RIGHT_IN4, HIGH);
 
}
void RIGHT()
{
  // 前左电机
  digitalWrite(FRONT_LEFT_IN1, HIGH);
  digitalWrite(FRONT_LEFT_IN2, LOW);


  // 前右电机
  digitalWrite(FRONT_RIGHT_IN3, LOW);
  digitalWrite(FRONT_RIGHT_IN4, HIGH);


  // 后左电机
  digitalWrite(REAR_LEFT_IN1, LOW);
  digitalWrite(REAR_LEFT_IN2, HIGH);


  // 后右电机
  digitalWrite(REAR_RIGHT_IN3, HIGH);
  digitalWrite(REAR_RIGHT_IN4, LOW);

}
void stopMotors()
{
// 前左电机
  digitalWrite(FRONT_LEFT_IN1, LOW);
  digitalWrite(FRONT_LEFT_IN2, LOW);


  // 前右电机
  digitalWrite(FRONT_RIGHT_IN3, LOW);
  digitalWrite(FRONT_RIGHT_IN4, LOW);


  // 后左电机
  digitalWrite(REAR_LEFT_IN1, LOW);
  digitalWrite(REAR_LEFT_IN2, LOW);


  // 后右电机
  digitalWrite(REAR_RIGHT_IN3, LOW);
  digitalWrite(REAR_RIGHT_IN4, LOW);

}
void LEFTFRONT()
{
  // 前左电机
  digitalWrite(FRONT_LEFT_IN1, LOW);
  digitalWrite(FRONT_LEFT_IN2, LOW);

  // 前右电机
  digitalWrite(FRONT_RIGHT_IN3, HIGH);
  digitalWrite(FRONT_RIGHT_IN4, LOW);


  // 后左电机
  digitalWrite(REAR_LEFT_IN1, HIGH);
  digitalWrite(REAR_LEFT_IN2, LOW);


  // 后右电机
  digitalWrite(REAR_RIGHT_IN3, LOW);
  digitalWrite(REAR_RIGHT_IN4, LOW);
}
void RIGHTBEHIND()
{
  // 前左电机
  digitalWrite(FRONT_LEFT_IN1, LOW);
  digitalWrite(FRONT_LEFT_IN2, LOW);

  // 前右电机
  digitalWrite(FRONT_RIGHT_IN3, LOW);
  digitalWrite(FRONT_RIGHT_IN4, HIGH);
 

  // 后左电机
  digitalWrite(REAR_LEFT_IN1, LOW);
  digitalWrite(REAR_LEFT_IN2, HIGH);
 

  // 后右电机
  digitalWrite(REAR_RIGHT_IN3, LOW);
  digitalWrite(REAR_RIGHT_IN4, LOW);
}
void RIGHTFRONT()
{
  // 前左电机
  digitalWrite(FRONT_LEFT_IN1, HIGH);
  digitalWrite(FRONT_LEFT_IN2, LOW);
  

  // 前右电机
  digitalWrite(FRONT_RIGHT_IN3, LOW);
  digitalWrite(FRONT_RIGHT_IN4, LOW);

  // 后左电机
  digitalWrite(REAR_LEFT_IN1, LOW);
  digitalWrite(REAR_LEFT_IN2, LOW);

  // 后右电机
  digitalWrite(REAR_RIGHT_IN3, HIGH);
  digitalWrite(REAR_RIGHT_IN4, LOW);
  
}
void LEFTBEHIND()
{
  // 前左电机
  digitalWrite(FRONT_LEFT_IN1, LOW);
  digitalWrite(FRONT_LEFT_IN2, HIGH);
  

  // 前右电机
  digitalWrite(FRONT_RIGHT_IN3, LOW);
  digitalWrite(FRONT_RIGHT_IN4, LOW);

  // 后左电机
  digitalWrite(REAR_LEFT_IN1, LOW);
  digitalWrite(REAR_LEFT_IN2, LOW);

  // 后右电机
  digitalWrite(REAR_RIGHT_IN3, LOW);
  digitalWrite(REAR_RIGHT_IN4, HIGH);
}
//以下的全是方向函数

void setup() 
{
  // 设置所有引脚为输出模式
  pinMode(FRONT_LEFT_IN1, OUTPUT);
  pinMode(FRONT_LEFT_IN2, OUTPUT);
  
  pinMode(FRONT_RIGHT_IN3, OUTPUT);
  pinMode(FRONT_RIGHT_IN4, OUTPUT);
  
  pinMode(REAR_LEFT_IN1, OUTPUT);
  pinMode(REAR_LEFT_IN2, OUTPUT);

  pinMode(REAR_RIGHT_IN3, OUTPUT);
  pinMode(REAR_RIGHT_IN4, OUTPUT);


  // 初始化Blinker
    Serial.begin(115200);
    BLINKER_DEBUG.stream(Serial);
    BLINKER_DEBUG.debugAll();
  Blinker.begin(auth, ssid, pswd);
  Button5.attach(Button5_callback);
  Button6.attach(Button6_callback);
  Button7.attach(Button7_callback);
  Button8.attach(Button8_callback);
  Button9.attach(Button9_callback);
  Button10.attach(Button10_callback);
  Button11.attach(Button11_callback);
  Button12.attach(Button12_callback);
  Button13.attach(Button13_callback);
  Button14.attach(Button14_callback);
  Button15.attach(Button15_callback);
}

void loop() 
{
  // 处理Blinker事件
  Blinker.run();
}